package com.cy.pj.notice.dao;

import com.cy.pj.notice.pojo插件lombok注解代替set和get方法.SysNotice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/*
创建公告模块数据持久层对象，借助此类型的对象基于Mybatis技术实现与数据库的交互，
通过这些交互来访问或操作公告模块的数据。
建议：在springboot工程中基于mybatis实现与数据库交互时，一般首先要定义一个数据层的
接口(例如SysNoticeDao),然后通过@Mapper注解对接口进行描述，当系统启动时，会对启动类所在包
以及子包中的类进行扫描，假如发现接口上有@Mapper注解(mybatis提供)，系统底层会基于接口创建其实现类，
在实现类的内部，底层会基于SqlSession对象实现数据访问会话和操作
*/
@Mapper  //这个注解只能用于数据持久层-dao接口
public interface SysNoticeDao {
    /**
     * 基于条件查询公告信息
     * @param sysNotice 用于封装查询参数
     * @return 基于条件查询的结果(返回值pojo属性,结果暂存在pojo里面)
     */
    List<SysNotice> selectNotices(SysNotice sysNotice);

    /**
     *基于id删除公告信息(删多行--可变参数)
     * @param id
     * @return 删除了几行
     *扩展：在jdk8之前，对于接口方法，假如参数有多个或者参数是数组，是不可以
     * 直接在sql映射文件中使用参数名的，需要通过@Param这个注解指定参数名(ids)，
     * 然后在sql映射语句中使用@Param注解中的名字(ids)获取参数数据(把array换成ids，其他一样)
     */
    //早期版本--int deletaById(@Param(“ids”) Long...id);
    int deleteById(Long...id);

    @Select("select * from sys_notice where id=#{id}")
    SysNotice selectById(Long id);

    /**
     * 持久化notice对象数据
     * @param notice (封装了要写入的数据)
     * @return 返回写入的行数
     */
    int insertNotice(SysNotice notice);

    /**
     * 基于id查询notice对象
     * @param id 公告唯一标识id
     * @return 基于id查询到的结果
     * 建议：简单的sql映射语句可以直接写到接口方法上，复杂sql还是推荐写在xml映射文件
     */
    @Select("select * from sys_notices where id=#{id}")
    SysNotice findById(Long id);

    /**
     * 持久化notice对象数据
     * @param sysNotice (封装了要更行的数据)
     * @return
     */
    int updateNotices(SysNotice sysNotice);
}
//Xxx.java-->.class(jvm解析器)-->010101010